package com.example.demo.dao;

import com.example.demo.entity.pojo.HomeworkSubmission;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 学生作业提交表(HomeworkSubmission)表数据库访问层
 *
 * @author makejava
 * @since 2025-07-13 17:30:30
 */
public interface HomeworkSubmissionDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    HomeworkSubmission queryById(Integer id);

    /**
     * 查询学生的作业提交记录
     *
     * @param homeworkId 作业ID
     * @param studentId 学生ID
     * @return 提交记录
     */
    HomeworkSubmission queryByHomeworkAndStudent(@Param("homeworkId") Integer homeworkId, 
                                                @Param("studentId") String studentId);

    /**
     * 根据作业ID查询所有提交记录
     *
     * @param homeworkId 作业ID
     * @return 提交记录列表
     */
    List<HomeworkSubmission> queryByHomeworkId(@Param("homeworkId") Integer homeworkId);

    /**
     * 根据学生ID查询提交记录
     *
     * @param studentId 学生ID
     * @return 提交记录列表
     */
    List<HomeworkSubmission> queryByStudentId(@Param("studentId") String studentId);

    /**
     * 查询待批改的作业
     *
     * @param teacherId 教师ID
     * @return 提交记录列表
     */
    List<HomeworkSubmission> queryPendingGrading(@Param("teacherId") String teacherId);

    /**
     * 新增数据
     *
     * @param homeworkSubmission 实例对象
     * @return 影响行数
     */
    int insert(HomeworkSubmission homeworkSubmission);

    /**
     * 修改数据
     *
     * @param homeworkSubmission 实例对象
     * @return 影响行数
     */
    int update(HomeworkSubmission homeworkSubmission);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

    /**
     * 统计作业提交数量
     *
     * @param homeworkId 作业ID
     * @return 提交数量
     */
    long countByHomeworkId(@Param("homeworkId") Integer homeworkId);

    /**
     * 统计学生提交数量
     *
     * @param studentId 学生ID
     * @return 提交数量
     */
    long countByStudentId(@Param("studentId") String studentId);
}
